<?php
/**
 * Offre les éléments d'un formulaire
 * 
 * BphFormItem	Tout élément
 * BphField		Tout champ (éditable si besoin)
 */
 
 
/**
 * Implemente les carac de tout objet faisant partie d'un formulaire
 * 
 * Renverra un paragraphe contenant l'element proprement dit
 * et eventuellement un label
 */
abstract class BphFormItem extends BphEmpty {
	/**
	 * string: Le nom (et l'id) de l'element
	 */
	public $name;
	
	/**
	 * BphItem: L'element de formulaire
	 */
	public $content;
	
	/**
	 * BphLabel: le label de l'element
	 */
	public $label;
	
	/**
	 * Bool: flag indiquant si le label doit contenir l'element
	 */
	public $in_label;
	
	/**
	 * constructeur
	 * @param string	$pname	le nom de l'element
	 */
	function __Construct($pname) {
		parent::__Construct();
		$this->name = $pname;
		$this->label = '';
		$this->in_label = BPH_FIELDINLABEL;
/*
*/
	}
	
	/**
	 * Configure l'aide pour l'element
	 * 
	 * @param	string	$plabel		le label affiché de l'element
	 * @param	string	$ptitle		le tooltip
	 */
	function SetHelp($plabel, $ptitle=''){	
		$this->label = new BphLabel($plabel, $this->name);
		$this->label->AddAttribut('title', $ptitle);
	}
	
	/**
	 * Renvoie le code de l'element
	 * 
	 * Avant ça, construit l'element suivant les parametres
	 */
	function Code($plevel){
		if ($this->label){
			$this->AddItems($this->label);
			if ($this->in_label)
				$this->label->Additems($this->content);
			else
				$this->AddItems($this->content);
		} 
		else
			$this->AddItems($this->content);
		return parent::Code($plevel);
	}
}//class BphFormItem


/**
 * Implémente les carac d'un objet de formulaire avec valeur
 */
abstract class BphField extends BphFormItem{
	/**
	 * mixed: valeur du champ
	 */
	public $value;

	/**
	 * Constructeur
	 */
	function __Construct($pname){
		parent::__Construct($pname);
		if ($this->content instanceof BphItem){
			$this->content->AddAttribut('name', $pname);
			$this->content->AddAttribut('id', $pname);
		}
	}
	
	/**
	 * Ajoute la valeur a l'objet (a surcharger selon le cas)
	 */
	function SetValue() {
		$this->content->AddAttribut('value', $this->value);
	}
	
	/**
	 * Renvoie le code html
	 */
	function Code($plevel) {
		$this->SetValue();
		return parent::Code($plevel);
	}
}//class BphField 


/**
 * Implémente les carac d'un objet de formulaire avec valeur
 */
abstract class BphFVisible extends BphField{
	/**
	 * Fixe les possibilitées du champ
	 */
	function SetAccess($preadonly, $pdisabled= False) {
		$this->content->AddAttribut('readonly', $preadonly);
		$this->content->AddAttribut('disabled', $pdisabled);
	}
	
	/**
	 * Configure l'aide pour l'element
	 * 
	 * @param	string	$plabel		le label affiché de l'element
	 * @param	string	$ptitle		le tooltip
	 * @param	string	$pplaceholder le texte d'exemple
	 */
	function SetHelp($plabel, $ptitle='', $pplaceholder=''){	
		parent::SetHelp($plabel, $ptitle);
		if ($pplaceholder)
			$this->content->AddAttribut('placeholder', $pplaceholder);
	}
}//class BphFVisible


/**
 * Implemente un champ caché
 */
class BphFHidden extends BphField {
	/**
	 * Constructeur
	 */
	function __Construct($pname){
		$this->content = new BphItem('input');
		parent::__Construct($pname);
		$this->content->AddAttribut('type', 'hidden');
	}
}// class BphFHidden

/**
 * Implemente un champ caché
 */
class BphFAction extends BphFormItem {
	/**
	 * Constructeur
	 */
	function __Construct($pin_row = True){
		$this->content = Array();
		$this->in_row = $pin_row;
		parent::__Construct('');
		$this->in_label = False;
	}
	
	function _AddButton($ptype, $pvalue='', $ptitle='', $pname=''){
		if ($this->in_row and count($this->content)>0)
			$this->content[] = new BphItem('br');
		$button = new BphItem('input');
		$button->AddAttribut('type', $ptype);
		$button->AddAttribut('value', $pvalue);
		$button->AddAttribut('title', $ptitle);
		$button->AddAttribut('name', $pname);
		$button->AddAttribut('id', $pname);
		$this->content[] = $button;
		return $button;
	}
	
	function AddSubmit($pvalue='', $ptitle='', $pname=''){
		return $this->_AddButton('submit', $pvalue, $ptitle, $pname);
	}
	
	function AddReset($pvalue='', $ptitle='', $pname=''){
		return $this->_AddButton('reset', $pvalue, $ptitle, $pname);
	}
	
	function AddButton($pvalue='', $ptitle='', $pname=''){
		return $this->_AddButton('button', $pvalue, $ptitle, $pname);
	}
}// class BphFHidden
?>
